package com.hlf.modules.api.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
import com.hlf.common.constants.Constants;
import com.hlf.common.utils.ReturnResult;
import com.hlf.common.validator.Assert;
import com.hlf.modules.api.annotation.AuthIgnore;
import com.hlf.modules.sys.entity.Area;
import com.hlf.modules.sys.entity.AreaDTO;
import com.hlf.modules.sys.service.AreaService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 行政区划表现层控制类
 * 
 * @author shuliangxing
 *
 * @date 2017年3月29日 下午3:25:16
 */
@RestController
@RequestMapping("api/area")
@Api("行政区划表现层控制类")
public class ApiAreaController {

	@Autowired
	AreaService service;

	/**
	 * 区域简短信息输出
	 */
	private SimplePropertyPreFilter areaFilter = new SimplePropertyPreFilter(Area.class, "areaCode", "name");

	/**
	 * 根据区域编码查询
	 * 
	 * @param areaCode
	 * @return
	 * @author shuliangxing
	 * @date 2017年3月29日 下午3:25:02
	 */
	@GetMapping(value = "{areaCode}")
	public ReturnResult getArea(@PathVariable("areaCode") Long areaCode) {
        Area area = service.selectByAreaCode(areaCode);
        return ReturnResult.ok().put(Constants.DEFAULT_RESULT_NAME,area);
	}

	/**
	 * 根据区域编码查询-简短信息
	 * 
	 * @param areaCode
	 * @return
	 * @author shuliangxing
	 * @date 2017年3月29日 下午3:25:02
	 */
	@ResponseBody
	@GetMapping(value = "short/{areaCode}")
	public String getShortArea(@PathVariable("areaCode") Long areaCode) {
		return JSON.toJSONString(service.selectByAreaCode(areaCode), areaFilter);
	}

	/**
	 * 根据父区域编码查询下级区域集合
	 * @return
	 * @author shuliangxing
	 * @date 2017年3月29日 下午3:26:55
	 */
	@ResponseBody
	@GetMapping(value = "next_areas/{pcode}")
	public List<Area> getList(@PathVariable("pcode") Long pcode) {
		return service.selectByPCode(pcode);
	}

	/**
	 * 根据父区域编码查询下级区域集合-简短信息
	 * 
	 * @param pcode
	 * @return
	 * @author shuliangxing
	 * @date 2017年3月29日 下午3:26:55
	 */
	@AuthIgnore
	@ApiOperation(value = "根据父区域编码查询下级区域集合-简短信息",notes = "根据父区域编码查询下级区域集合-简短信息")
	@GetMapping(value = "nextAreas/short/{pcode}")
	@ApiImplicitParams({
			@ApiImplicitParam(paramType = "path", dataType="string", name = "pcode", value = "父区域编码", required = true)
	})
	public ReturnResult getShortList(@PathVariable("pcode") String pcode) {
		Assert.isNull(pcode, "短信类型不能为空");
        String s = JSON.toJSONString(service.selectByPCode(Long.parseLong(pcode)), areaFilter);
        List<AreaDTO> areaDTOS = JSON.parseArray(s, AreaDTO.class);
        return ReturnResult.ok().put(Constants.DEFAULT_RESULT_NAME,areaDTOS);
    }

}
